Page({
  data: {
    videoUrl: '',          // 视频地址
    videoTitle: '视频标题', // 视频标题
    viewCount: 0,          // 播放次数
    publishDate: '',       // 发布日期
    videoHeight: 400,      // 视频高度
    isPlaying: false,      // 播放状态
    currentTime: 0,        // 当前播放时间
    duration: 0,           // 视频总时长
    showCustomControls: false, // 是否显示自定义控件
    errorMsg: '',          // 错误信息
    videoContext: null,    // 视频上下文
    relatedVideos: []      // 相关推荐视频
  },

  onLoad(options) {
    // 获取传递的视频参数
    const videoUrl = decodeURIComponent(options.url || '')
    const videoTitle = options.title || '未命名视频'
    
    this.setData({
      videoUrl,
      videoTitle,
      viewCount: Math.floor(Math.random() * 10000) + 1000,
      publishDate: this.formatDate(new Date()),
      videoHeight: this.calculateVideoHeight()
    })
    
    // 获取视频上下文
    this.videoContext = wx.createVideoContext('mainVideo', this)
    
    // 加载相关推荐
    this.loadRelatedVideos()
    
    // 监听横竖屏切换
    wx.onWindowResize((res) => {
      if (res.deviceOrientation === 'landscape') {
        this.setData({ videoHeight: wx.getSystemInfoSync().windowHeight * 2 })
      } else {
        this.setData({ videoHeight: this.calculateVideoHeight() })
      }
    })
  },

  // 计算视频高度 (16:9比例)
  calculateVideoHeight() {
    const systemInfo = wx.getSystemInfoSync()
    return (systemInfo.windowWidth * 9 / 16) * 2 // rpx单位
  },

  // 加载相关推荐视频
  loadRelatedVideos() {
    // 模拟数据，实际应从接口获取
    const relatedVideos = [
      { id: 1, cover: 'https://example.com/cover1.jpg', title: '相关视频标题1', viewCount: 1234, duration: '02:30' },
      { id: 2, cover: 'https://example.com/cover2.jpg', title: '相关视频标题2', viewCount: 5678, duration: '04:15' },
      { id: 3, cover: 'https://example.com/cover3.jpg', title: '相关视频标题3', viewCount: 9012, duration: '03:45' }
    ]
    this.setData({ relatedVideos })
  },

  // 播放/暂停切换
  togglePlay() {
    if (this.data.isPlaying) {
      this.videoContext.pause()
    } else {
      this.videoContext.play()
    }
  },

  // 播放事件
  onPlay() {
    this.setData({ isPlaying: true, showCustomControls: false })
  },

  // 暂停事件
  onPause() {
    this.setData({ isPlaying: false, showCustomControls: true })
  },

  // 播放进度更新
  onTimeUpdate(e) {
    this.setData({
      currentTime: e.detail.currentTime,
      duration: e.detail.duration || this.data.duration
    })
  },

  // 全屏切换
  onFullscreenChange(e) {
    if (e.detail.fullScreen) {
      // 全屏时隐藏自定义控件
      this.setData({ showCustomControls: false })
    }
  },

  // 滑动条拖动中
  onSliderChanging(e) {
    // 拖动时暂停播放
    if (this.data.isPlaying) {
      this.videoContext.pause()
    }
    this.setData({ currentTime: e.detail.value })
  },

  // 滑动条拖动结束
  onSliderChange(e) {
    // 跳转到指定位置
    this.videoContext.seek(e.detail.value)
    // 继续播放
    this.videoContext.play()
  },

  // 播放相关视频
  playRelatedVideo(e) {
    const videoId = e.currentTarget.dataset.id
    const video = this.data.relatedVideos.find(v => v.id === videoId)
    
    if (video) {
      // 实际项目中应从接口获取视频地址
      const videoUrl = `https://example.com/videos/${videoId}.mp4`
      
      this.setData({
        videoUrl,
        videoTitle: video.title,
        currentTime: 0,
        duration: 0
      })
      
      // 重新播放
      this.videoContext.seek(0)
      this.videoContext.play()
    }
  },

  // 格式化时间 (秒 -> mm:ss)
  formatTime(seconds) {
    const min = Math.floor(seconds / 60)
    const sec = Math.floor(seconds % 60)
    return `${min.toString().padStart(2, '0')}:${sec.toString().padStart(2, '0')}`
  },

  // 格式化日期
  formatDate(date) {
    const year = date.getFullYear()
    const month = (date.getMonth() + 1).toString().padStart(2, '0')
    const day = date.getDate().toString().padStart(2, '0')
    return `${year}-${month}-${day}`
  },

  // 错误处理
  onError(e) {
    console.error('视频播放错误:', e.detail.errMsg)
    this.setData({
      errorMsg: '视频播放失败，请检查网络或视频地址',
      isPlaying: false
    })
  },

  // 重试播放
  retryPlay() {
    this.setData({ errorMsg: '' })
    this.videoContext.seek(0)
    this.videoContext.play()
  },

  // 页面卸载时释放资源
  onUnload() {
    this.videoContext.stop()
    wx.offWindowResize()
  }
})